package com.itlaobing.proxy.dynamic;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 使用 Proxy 类 的 newProxyInstance 方法创建代理对象( proxy object )
 */
public class Test1 {

    public static void main(String[] args) {

        //创建 代理目标 （proxy target）
        HuaWei target = new Factory();

        // 获得代理类(即代理目标对应的类)
        Class<?> targetClass = target.getClass(); // 获得代理目标所对应的类(返回一个Class实例)
        ClassLoader loader = targetClass.getClassLoader(); // 获得 targetClass类 的类加载器

        Class<?>[] interfaces = targetClass.getInterfaces(); // 获得 targetClass类 所直接实现的接口

        InvocationHandler handler = new InvocationHandler(){
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                return null;
            }
        };

        // 创建代理对象(proxy object)
        Object proxy = Proxy.newProxyInstance( loader , interfaces , handler );

        System.out.println(proxy);  //null
        System.out.println(proxy.toString());   //null
        System.out.println(System.identityHashCode(proxy));

        System.out.println(proxy==null); //false

        // 获得 代理类 （proxy class）
        Class<?> proxyClass = proxy.getClass();
        System.out.println( proxyClass );
    }
}
